درسنامه آموزشی پودمان 3 دانش فنی پایه دهم شبکه و نرم افزار رایانه
حل مسئله و الگوریتم
آیا تا به حال اندیشیدهاید
1- چطور میتوانیم یک مشکل پیچیده را به بخشهای کوچکتر تقسیم کنیم تا حل آن راحتتر شود؟
2- اگر بخواهیم یک سیستم هوشمند بسازیم که تصمیم بگیرد چه کاری را در چه زمانی انجام دهد، چه مراحلی باید طی شود؟
3- اگر بخواهید یک دستگاه خودکار برای مرتبسازی لیستی از اعداد طراحی کنید، چه قدمهایی را باید برای نوشتن الگوریتم دنبال کنید؟
4- چطور میتوانید از الگوریتمها برای تصمیمگیری در مسائل روزمره یا شغلی استفاده کنید؟
5- چطور یک رایانه یا برنامه رایانهای میتواند یک معادله پیچیده را سریعتر از ما حل کند؟
از هنرجو انتظار میرود
1- هنرجو قادر به حل مسائل با استفاده از الگوریتمها و فلوچارت باشد.
2- هنرجو بتواند الگوریتمهای ساده را طراحی، تحلیل و پیادهسازی کند.
3- هنرجو توانایی ارزیابی الگوریتمها و انتخاب بهترین روش برای حل یک مسئله را داشته باشد.
4- هنرجو بتواند بهصورت عملی و کاربردی الگوریتمها را در مسائل دنیای واقعی به کار گیرد.
استاندارد عملکرد
هنرجو باید بتواند مسائل را تحلیل کرده و آن را به بخشهای ساده تقسیم کند و الگوریتم مناسب برای حل آن طراحی و نمودار آن را رسم کند و مهارت استفاده از الگوریتمها را در زندگی واقعی و شغلی خود بهکار گیرد.
حل مسئله؟!
شناسایی مسئله، اولین و حیاتیترین گام در فرایند حل مسئله است. این مرحله تعیین میکند آیا شما مشکل واقعی را شناسایی کردهاید یا فقط علائم سطحی آن را میبینید. شناسایی دقیق مسئله، مانند نورافکنی است که مسیر حل را روشن میکند. شما باید یاد بگیرید مسئله را از زوایای مختلف بررسی کنید، دادهها را تحلیل و قبل از نوشتن کد یا رسم فلوچارت، مشکل واقعی را کشف کنید.
برای این که مهارت خوبی را در حل مسئله پیدا کنید لازم است است این مراحل را انجام دهید.
1- تعریف دقیق مسئله
مسئله چیست؟ شکاف بین مشکل (نتیجۀ نامطلوب) و خواسته (هدف مطلوب) را مشخص میکند.
فعالیت (صفحهٔ 65 کتاب درسی)
شما هم چند نمونه دیگر مثال بزنید و مشکل و خواسته را در آن مشخص کنید.
2- اجزای تشکیلدهندۀ مسئله
ورودیها: دادههای موجود، خروجیها: نتایج مورد انتظار و محدودیتها: قوانین حاکم.
3- روشهای شناسایی مسئله
پرسشهای کلیدی:
چه چیزی کار نمیکند؟
چه زمانی مشکل رخ میدهد؟
تفکیک علائم از علت اصلی با روشهایی مانند (5 چرا) یا رجوع به مثالهای قبلی.
برای روشن شدن مطلب به مثالهای زیر دقت کنید.
در اینجا روش حل مسئله، چراهایی بود که فرد را به ریشه اصلی مشکل هدایت میکرد. با رسیدن به ریشه اصلی مشکل و پاسخ دادن به آن میتوان راه حلی برای مسئله پیدا کرد.
مراحل اجرای روش 5 چرا
1- مشکل را بهطور واضح تعریف کنید.
2- بپرسید چرا این مشکل اتفاق افتاد؟
3- پاسخ را پایهای برای پرسش «چرا؟» بعدی قرار دهید.
4- این روند را تا رسیدن به علت اصلی ادامه دهید (معمولاً در 5 مرحله یا بیشتر که بستگی به پیچیدگیهای مسئله دارد.)
4- خطاهای رایج در شناسایی مسئله
تمرکز بر علائم به جای ریشه مثال: «برنامه کند است» راه حل: ممکن است مشکل از الگوریتم ناکارآمد باشد، نه سختافزار!
تعریف مبهم مسئله مثال: «برنامه خوب کار نمیکند» راه حل: باید دقیقاً مشخص شود چه بخشی مشکل دارد.
پاسخ باید واقع بینانه باشد و نه بر اساس حدس و گمان.
فعالیت (صفحهٔ 67 کتاب درسی)
مثالهایی کاربردی از مشکلات در زمینه رایانه و برنامهنویسی را با روش «5 چرا» حل کنید.
روش پولیا
بعد از شناسایی علت به وجود آمدن مشکل باید دنبال راه حلی برای رفع آن باشید. حل مسئله فرایندی پیچیدهتر از تفکر است. روشهای مختلفی برای حل مسئله وجود دارد. روش پولیا یکی از روشهایی است که برای اولینبار، برای حل ساختاریافته مسائل در 4 مرحله در کتاب «چگونه مسئله را حل کنیم» توسط جورج پولیا معرفی شد.
مراحل اصلی روش پولیا:
1- فهم مسئله (Understand the Problem)
- مسئله دقیقاً چیست؟ شناختن و داشتن درک درست از مسئله.
- دادههای ورودی و خروجی مورد نیاز کدامند؟ چه داریم و چه میخواهیم؟
- آیا محدودیتها و شرایطی وجود دارد؟
طرح نقشه (Devise a Plan):
در این بخش باید به سؤال: با توجه به شرایط مسئله، ارتباط بین دادهها و مجهول چیست؟ پاسخ داده شود و نقشه طرح شده در قالب الگوریتم یا روندنما بیان شود که موارد زیر را شامل میشود:
- تقسیم مسئله به بخشهای کوچکتر.
- استفاده از الگوهای شناخته شده (مثال: حلقه، شرط).
- رسم نمودار یا فلوچارت.
2- اجرای نقشه (Carry Out the Plan)
پیادهسازی گامبهگام راه حل و بررسی درستی هر مرحله برای افزایش دقت و سرعت میتوان نقشه را با یک زبان برنامهنویسی نوشت و در یک رایانه اجرا کرد.
3- بازنگری (Look Back)
در این مرحله درستی پاسخ بررسی و در صورت بهینهبودن برای توسعه آن به موارد مشابه استفاده میشود. این مرحله موارد زیر را شامل میشود:
- آیا پاسخ منطقی است؟
- آیا راه حل بهینه است؟
- چگونه میتوان آن را تعمیم داد؟
مراحل اصلی روش پولیا در جدول زیر با ذکر یک مثال آمده است.

فعالیت کلاسی (صفحهٔ 68 کتاب درسی)
به روش پولیا این معما را حل کنید؟
چهار نفر D ،C ،B ،A باید از یک پل قدیمی در شب عبور کنند. شرایط به شرح زیر است:
پل همزمان فقط تحمل دو نفر را دارد.
آنها فقط یک چراغ دارند که باید در هر عبور از پل همراهشان باشد.
هر نفر سرعت متفاوتی دارد. :(A 1 دقیقه - B: 2 دقیقه – C: 5 دقیقه ـ D:10 دقیقه)
کل زمان موجود برای عبور همه 17 دقیقه است.
الگوریتم (Algorithm)
ماجراجویی در شهر الگوریتمیا
یک روز، دانشآموزان یک لینک الکترونیکی از طرف خانم پاینده هنرآموزشان دریافت میکنند:
به شهر الگوریتمیا خوش آمدید! برای بازکردن گنجینۀ دانش، باید 3 دروازۀ رمزگذاری شده را با الگوریتمها باز کنید. فراموش نکنید: اول فکر، بعد کد!
آنها با کلیک روی لینک نامه، وارد دنیایی دیجیتال میشوند که ساختمانها به شکل نمادهای فلوچارت (مثل لوزی شرط، مستطیل پردازش) ساخته شدهاند!
دروازۀ ترتیب و توالی
خانم پاینده ظاهر میشود و میگوید:
برای عبور، باید مراحل پخت کیک را بهصورت الگوریتمی بنویسید! اما هشدار: اگر مراحل را جابهجا کنید، کیک منفجر میشود!
سارا که در کدنویسی ماهر ولی عجول است با دانشآموزان بحث میکنند:
سارا: بیایید اول تخم مرغها رو بزنیم بعد آرد رو اضافه کنیم!
دانشآموزان: «نه! تو دستورالعمل گفته اول فر را روشن کنیم تا گرم شود. یادت باشد ترتیب مهم است! آنها مراحل را بهدرستی مینویسند و دروازه باز میشود.
دروازۀ شرطی
دروازۀ دوم یک لوزی غولپیکر است که میپرسد.
عددی بین 1 تا 100 انتخاب کنید. اگر «زوج» بود، دروازه باز میشود!
سارا سریع میگوید: «2 میدهم!» اما دروازه نمیجنبد!
خانم پاینده فریاد میزند: «شرط را کامل نکردهاید! باید بررسی کنید عدد ورودی حتماً بین 1 تا 100 باشد! دروازه با وارد کردن عدد 24 باز میشود!
دروازۀ حلقۀ تکرار
در این دروازه از آنها خواسته میشود که مسیر مارپیچی را با پریدن روی سنگهای شمارهگذاری شده طی کنند. شرط عبور:
فقط روی سنگهای مضرب 5 بپرید و هرگز از عدد 30 عبور نکنید!
سارا میخواهد سریع همۀ سنگها را امتحان کند، اما سایر دانشآموزان او را متوقف میکنند.
بیا از یک حلقۀ تکرار استفاده کنیم!
ـ از 5 شروع کن، 5 تا 5 تا برو تا به 30 برسی.
ـ اگر سنگ اشتباهی رو انتخاب کردی، برگرد!
آنها با اجرای این الگوریتم، موفق به عبور میشوند.
با عبور از آخرین دروازه، گنجینۀ درخشان الگوریتمیا نمایان میشود: یک کتاب طلایی با عنوان «اصول تفکر الگوریتمی».
خانم پاینده میگوید: این گنجینه را تنها کسانی پیدا میکنند که یاد گرفتهاند هر مسئله را به مراحل کوچک، شرطهای دقیق و حلقههای بهینه تقسیم کنند. به خاطر داشته باشید: بهترین برنامهنویسان، اول الگوریتم نویسهای ماهری هستند!
الگوریتم، همان نقشۀ راه ذهن شماست! که برای بیان حل مسئله به کار میرود. الگوریتم سنگ بنای ورود به دنیای دیجیتال است. با یادگیری الگوریتم خود را برای دنیای فناوری فردا آماده خواهید کرد. الگوریتم باعث تقویت تفکر منطقی شما خواهد شد. چه بخواهید یک ربات را برنامهریزی کنید یا یک اپلیکیشن هوشمند بسازید، بدون طراحی الگوریتم، مانند رانندهای هستید که بدون GPS مسیر را گم میکند!
از مسائل سادۀ روزمره (مثل پیدا کردن بزرگترین عدد در یک لیست) تا پروژههای پیچیدۀ نرمافزاری، همه با تفکر الگوریتمی قابل مدیریت هستند.
فلوچارت، زبان تصویری الگوریتمها است. این نمودارها به شما کمک میکنند تا مراحل حل مسئله را مانند یک داستان مصور، واضح و گامبهگام ترسیم کنید.
الگوریتمها بهدلیل توانایی در شکستن و ساده کردن وظایف پیچیده، تضمین ثبات و قابلیت اطمینان در نتایج، بسیار جذاب هستند. هنگامی که یک الگوریتم بهدرستی اجرا شود، بهطور مداوم همان نتیجه را ایجاد میکند، که این امر یک جنبه ضروری از پردازش رایانهای است. این امر رایانهها را قادر میسازد تا طیف وسیعی از وظایف، از محاسبات ساده تا حل مسائل پیچیده را انجام دهند.
الگوریتمها مانند کمک کنندگان نامرئی در کارهای روزمره هستند که در پشت صحنه برای سازماندهی و بهبود کارایی کار میکنند.
کنجکاوی (صفحهٔ 70 کتاب درسی)
آیا تا به حال فکر کردهاید که چگونه چراغهای راهنمایی به این راحتی کار میکنند؟
نوشتن الگوریتم فرایندی ساختاریافته است که با رعایت مراحل زیر، هر مسئلهای را میتوان بهخوبی حل کرد (جدول زیر).

| گامهای نوشتن الگوریتم | مثال |
|---|---|
| 1- تحلیل و درک مسئله | بهدست آوردن حاصل جمع سه عدد ورودی: سه عدد a,b,c خروجی: مجموع سه عدد محدودیتها: اعداد میتوانند مثبت، منفی یا اعشاری باشند. - ورودی باید عددی باشد (مثال: خطا در صورت ورود حروف). |
| شکستن مسئله بزرگ به بخشهای کوچکتر و قابل مدیریت. جمع سه عدد یک عملیات تکمرحلهای است و نیازی به تقسیم به مراحل کوچکتر ندارد |
1- دریافت عدد اول 2- دریافت عدد دوم 3- دریافت عدد سوم 4- محاسبۀ مجموع |
| 2- طراحی الگوریتم (شبهکد) | 1- شروع 2- عدد اول را دریافت کن و در متغیر a ذخیره کن. 3- عدد دوم را دریافت کن و در متغیر b ذخیره کن. 4- عدد سوم را دریافت کن و در متغیر c ذخیره کن. 5- مجموع را حساب کن: $sum = a + b + c$ 6- نتیجه را نمایش بده. 7- پایان |
| 3- آزمایش الگوریتم | - تست 1: - ورودی: 2 و 3 و 5 خروجی 10 - تست 2: - ورودی: 2- و 1 و .4/5 خروجی: 3/5 |
| تعمیم به مسائل پیچیدهتر | این الگوریتم ساده، پایۀ حل مسائلی مثل: - محاسبۀ میانگین n عدد. - جمع اعداد در آرایهها. - حل معادلات ریاضی پیچیدهتر است |
هر الگوریتمی شامل این بخشها میباشد.
- نقطه شروع داشته و پس از چند مرحله خاتمه یابد.
- هر گام باید به روشنی تعریف شده و قابل انجام باشد.
- دارای هیچ یا چندین مقدار ورودی باشد.
- دارای یک یا چند خروجی باشد.
- با توجه به محدودیتهای مجری آن طراحی شود تا قابل انجام باشد.
گام اول: خروجیها کدامند؟
گام دوم: ورودیها کدامند؟
گام سوم: چه ارتباطی بین ورودیها و خروجیها وجود دارد؟ این گام با توجه به شرایط مسئله شکل میگیرد که شامل عملیاتی است که روی ورودیها انجام میگیرد تا خروجی مورد انتظار بهدست آید. این گام پردازشهای یک الگوریتم را شامل میشود.
فرض کنید میخواهید برنامهای بنویسید (جدول زیر).
| شناخت مسئله | ورودی: تاریخ تولد کاربر، تاریخ جاری خروجی: سن کاربر |
| طراحی نقشه | 1- شروع 2- دریافت تاریخ تولد از کاربر ← ورودی 3- محاسبۀ اختلاف سال جاری و سال تولد ← پردازش 4- نمایش نتیجه ← خروجی 5- پایان |
برای ذخیره مقادیر ورودیها و خروجیها از متغیرها استفاده کنید.
متغیرها به مکانهایی از حافظه گفته میشود که انواع مختلفی از مقادیر را درخود ذخیره میکند.
برای متغیرها نامی متناسب با مقادیری که در آنها ذخیره میشود در نظر بگیرید. این نامگذاری را با حروف و علائم انگلیسی انجام دهید. برای نامگذاری متغیرها از اسامی کلیدی و ذخیره شده، مانند: , ... if,COM1,2,FOR استفاده نکنید.
کنجکاوی (صفحهٔ 73 کتاب درسی)
سایر مواردی که باید در نامگذاری متغیرها درنظر گرفته شود را بیابید و در کلاس برای دوستان خود ارائه دهید.
عملگرها
برای انجام عملیات و محاسبات از نمادهای خاصی که به آنها عملگر گفته میشود استفاده کنید. (جداول زیر به ترتیب)
در زمان انجام محاسبات این عملگرها عملیات را بر روی متغیرهای ورودی که به آنها عملوند گفته میشود، انجام داده و در پایان نتیجه محاسبات و یا همان پردازش در متغیر خروجی ذخیره و به کاربر نشان داده میشود.
هر یک از عملگرها در زمان اجرا دارای اولویت مخصوص به خود هستند که در جدول زیر آورده شده است:
برای تغییر ترتیب اجرای محاسبات در عملیات از پرانتز استفاده میشود. اولویتهایی که یکسان هستند، از چپ به راست اجرا میشود.
نتیجه یک عملگر مقایسه عبارت در صورت صحیح بودن مقایسه : درست (true)
و در صورت غلط بودن مقایسه : نادرست (false) میباشد.
عملگر AND یا &&: نتیجه درست (true) است فقط اگر هر دو شرط درست باشند
عملگر OR یا ||: نتیجه درست (True) است اگر حداقل یکی از شروط درست باشد.
عملگر NOT یا !: نتیجۀ نقیض شرط را برمیگرداند.
برای بازنویسی الگوریتمهای فارسی از نمادهای جدول زیر استفاده کنید. در این صورت الگوریتم شبیه به کدهای برنامه نوشته میشود. که به آن شبه کد نیزگفته میشود (جدول زیر).
| کلمات کلیدی | متغیرها | نمادهای ریاضی | ||||||||
| شروع | ورودی | خروجی | پایان | تاریخ تولد | تاریخ فعلی | سن | جمع | ضرب | تفریق | تقسیم |
| start | input | output | End | Birthdate | Nowdate | AGE | $ + $ | $ \times $ | $ - $ | $/$ |
از نماد ← برای انتساب یا همان مقدار دادن به یک متغیر استفاده کنید. مثال: 4 ← A در این مثال مقدار 4 در متغیر A قرار میگیرد.
مثال: با داشتن تاریخ تولد کاربر سن وی را بهدست آورید (جدول زیر).
| شناخت مسئله | ورودی: تاریخ تولد کاربر، تاریخ جاری خروجی: سن کاربر |
| طراحی نقشه | 1- start 2- input Birthdate 3- Age ← Nowdate – Birthdate 4- Output Age 5- End |
فعالیت (صفحهٔ 75 کتاب درسی)
الگوریتمی طراحی کنید که بتواند دو عدد از ورودی بگیرد و در متغیرهای A,B قرار دهد. سپس عدد بزرگتر را در یک متغیر به نام Max قرار دهد.